﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PACKETPARSERMAX20.CORE
{

    public enum ItemModType : int
    {
        ITEM_MOD_MANA = 0,
        ITEM_MOD_HEALTH = 1,
        ITEM_MOD_AGILITY = 3,
        ITEM_MOD_STRENGTH = 4,
        ITEM_MOD_INTELLECT = 5,
        ITEM_MOD_SPIRIT = 6,
        ITEM_MOD_STAMINA = 7,
        ITEM_MOD_DEFENSE_SKILL_RATING = 12,
        ITEM_MOD_DODGE_RATING = 13,
        ITEM_MOD_PARRY_RATING = 14,
        ITEM_MOD_BLOCK_RATING = 15,
        ITEM_MOD_HIT_MELEE_RATING = 16,
        ITEM_MOD_HIT_RANGED_RATING = 17,
        ITEM_MOD_HIT_SPELL_RATING = 18,
        ITEM_MOD_CRIT_MELEE_RATING = 19,
        ITEM_MOD_CRIT_RANGED_RATING = 20,
        ITEM_MOD_CRIT_SPELL_RATING = 21,
        ITEM_MOD_HIT_TAKEN_MELEE_RATING = 22,
        ITEM_MOD_HIT_TAKEN_RANGED_RATING = 23,
        ITEM_MOD_HIT_TAKEN_SPELL_RATING = 24,
        ITEM_MOD_CRIT_TAKEN_MELEE_RATING = 25,
        ITEM_MOD_CRIT_TAKEN_RANGED_RATING = 26,
        ITEM_MOD_CRIT_TAKEN_SPELL_RATING = 27,
        ITEM_MOD_HASTE_MELEE_RATING = 28,
        ITEM_MOD_HASTE_RANGED_RATING = 29,
        ITEM_MOD_HASTE_SPELL_RATING = 30,
        ITEM_MOD_HIT_RATING = 31,
        ITEM_MOD_CRIT_RATING = 32,
        ITEM_MOD_HIT_TAKEN_RATING = 33,
        ITEM_MOD_CRIT_TAKEN_RATING = 34,
        ITEM_MOD_RESILIENCE_RATING = 35,
        ITEM_MOD_HASTE_RATING = 36,
        ITEM_MOD_EXPERTISE_RATING = 37
    };


    public enum ItemSpelltriggerType : int
    {
        ITEM_SPELLTRIGGER_ON_USE = 0,                  // use after equip cooldown
        ITEM_SPELLTRIGGER_ON_EQUIP = 1,
        ITEM_SPELLTRIGGER_CHANCE_ON_HIT = 2,
        ITEM_SPELLTRIGGER_SOULSTONE = 4,
        ITEM_SPELLTRIGGER_ON_NO_DELAY_USE = 5,                  // no equip cooldown
        ITEM_SPELLTRIGGER_LEARN_SPELL_ID = 6                   // used in item_template.spell_2 with spell_id with SPELL_GENERIC_LEARN in spell_1
    };


    public enum ItemBondingType : int
    {
        NO_BIND = 0,
        BIND_WHEN_PICKED_UP = 1,
        BIND_WHEN_EQUIPED = 2,
        BIND_WHEN_USE = 3,
        BIND_QUEST_ITEM = 4,
        BIND_QUEST_ITEM1 = 5         // not used in game
    };

    // masks for ITEM_FIELD_FLAGS field
    public enum ITEM_FLAGS : uint
    {
        ITEM_FLAGS_BINDED = 0x00000001,
        ITEM_FLAGS_CONJURED = 0x00000002,
        ITEM_FLAGS_OPENABLE = 0x00000004,
        ITEM_FLAGS_WRAPPED = 0x00000008,
        ITEM_FLAGS_WRAPPER = 0x00000200, // used or not used wrapper
        ITEM_FLAGS_PARTY_LOOT = 0x00000800, // determines if item is party loot or not
        ITEM_FLAGS_CHARTER = 0x00002000, // arena/guild charter
        ITEM_FLAGS_UNIQUE_EQUIPPED = 0x00080000,
        ITEM_FLAGS_USEABLE_IN_ARENA = 0x00200000,
        ITEM_FLAGS_THROWABLE = 0x00400000, // not used in game for check trow possibility, only for item in game tooltip
        ITEM_FLAGS_SPECIALUSE = 0x00800000, // last used flag in 2.3.0
        ITEM_FLAGS_BOA = 0x08000000, // bind on account
        ITEM_FLAGS_MILLABLE = 0x20000000
    };

    public enum BAG_FAMILY_MASK : uint
    {
        BAG_FAMILY_MASK_ARROWS = 0x00000001,
        BAG_FAMILY_MASK_BULLETS = 0x00000002,
        BAG_FAMILY_MASK_SOUL_SHARDS = 0x00000004,
        BAG_FAMILY_MASK_LEATHERWORKING_SUPP = 0x00000008,
        BAG_FAMILY_MASK_INSCRIPTION_SUPP = 0x00000010,
        BAG_FAMILY_MASK_HERBS = 0x00000020,
        BAG_FAMILY_MASK_ENCHANTING_SUPP = 0x00000040,
        BAG_FAMILY_MASK_ENGINEERING_SUPP = 0x00000080,
        BAG_FAMILY_MASK_KEYS = 0x00000100,
        BAG_FAMILY_MASK_GEMS = 0x00000200,
        BAG_FAMILY_MASK_MINING_SUPP = 0x00000400,
        BAG_FAMILY_MASK_SOULBOUND_EQUIPMENT = 0x00000800,
        BAG_FAMILY_MASK_VANITY_PETS = 0x00001000,
        BAG_FAMILY_MASK_CURRENCY_TOKENS = 0x00002000,
        BAG_FAMILY_MASK_QUEST_ITEMS = 0x00004000
    };

    public enum SocketColor : int
    {
        SOCKET_COLOR_META = 1,
        SOCKET_COLOR_RED = 2,
        SOCKET_COLOR_YELLOW = 4,
        SOCKET_COLOR_BLUE = 8
    };


    public enum InventoryType : int
    {
        INVTYPE_NON_EQUIP = 0,
        INVTYPE_HEAD = 1,
        INVTYPE_NECK = 2,
        INVTYPE_SHOULDERS = 3,
        INVTYPE_BODY = 4,
        INVTYPE_CHEST = 5,
        INVTYPE_WAIST = 6,
        INVTYPE_LEGS = 7,
        INVTYPE_FEET = 8,
        INVTYPE_WRISTS = 9,
        INVTYPE_HANDS = 10,
        INVTYPE_FINGER = 11,
        INVTYPE_TRINKET = 12,
        INVTYPE_WEAPON = 13,
        INVTYPE_SHIELD = 14,
        INVTYPE_RANGED = 15,
        INVTYPE_CLOAK = 16,
        INVTYPE_2HWEAPON = 17,
        INVTYPE_BAG = 18,
        INVTYPE_TABARD = 19,
        INVTYPE_ROBE = 20,
        INVTYPE_WEAPONMAINHAND = 21,
        INVTYPE_WEAPONOFFHAND = 22,
        INVTYPE_HOLDABLE = 23,
        INVTYPE_AMMO = 24,
        INVTYPE_THROWN = 25,
        INVTYPE_RANGEDRIGHT = 26,
        INVTYPE_QUIVER = 27,
        INVTYPE_RELIC = 28
    };


    public enum ItemClass : int
    {
        ITEM_CLASS_CONSUMABLE = 0,
        ITEM_CLASS_CONTAINER = 1,
        ITEM_CLASS_WEAPON = 2,
        ITEM_CLASS_GEM = 3,
        ITEM_CLASS_ARMOR = 4,
        ITEM_CLASS_REAGENT = 5,
        ITEM_CLASS_PROJECTILE = 6,
        ITEM_CLASS_TRADE_GOODS = 7,
        ITEM_CLASS_GENERIC = 8,
        ITEM_CLASS_RECIPE = 9,
        ITEM_CLASS_MONEY = 10,
        ITEM_CLASS_QUIVER = 11,
        ITEM_CLASS_QUEST = 12,
        ITEM_CLASS_KEY = 13,
        ITEM_CLASS_PERMANENT = 14,
        ITEM_CLASS_JUNK = 15
    };


    public enum ItemSubclassConsumable : int
    {
        ITEM_SUBCLASS_CONSUMABLE = 0,
        ITEM_SUBCLASS_POTION = 1,
        ITEM_SUBCLASS_ELIXIR = 2,
        ITEM_SUBCLASS_FLASK = 3,
        ITEM_SUBCLASS_SCROLL = 4,
        ITEM_SUBCLASS_FOOD = 5,
        ITEM_SUBCLASS_ITEM_ENHANCEMENT = 6,
        ITEM_SUBCLASS_BANDAGE = 7,
        ITEM_SUBCLASS_CONSUMABLE_OTHER = 8
    };


    public enum ItemSubclassContainer : int
    {
        ITEM_SUBCLASS_CONTAINER = 0,
        ITEM_SUBCLASS_SOUL_CONTAINER = 1,
        ITEM_SUBCLASS_HERB_CONTAINER = 2,
        ITEM_SUBCLASS_ENCHANTING_CONTAINER = 3,
        ITEM_SUBCLASS_ENGINEERING_CONTAINER = 4,
        ITEM_SUBCLASS_GEM_CONTAINER = 5,
        ITEM_SUBCLASS_MINING_CONTAINER = 6,
        ITEM_SUBCLASS_LEATHERWORKING_CONTAINER = 7
    };



    public enum ItemSubclassWeapon : int
    {
        ITEM_SUBCLASS_WEAPON_AXE = 0,
        ITEM_SUBCLASS_WEAPON_AXE2 = 1,
        ITEM_SUBCLASS_WEAPON_BOW = 2,
        ITEM_SUBCLASS_WEAPON_GUN = 3,
        ITEM_SUBCLASS_WEAPON_MACE = 4,
        ITEM_SUBCLASS_WEAPON_MACE2 = 5,
        ITEM_SUBCLASS_WEAPON_POLEARM = 6,
        ITEM_SUBCLASS_WEAPON_SWORD = 7,
        ITEM_SUBCLASS_WEAPON_SWORD2 = 8,
        ITEM_SUBCLASS_WEAPON_obsolete = 9,
        ITEM_SUBCLASS_WEAPON_STAFF = 10,
        ITEM_SUBCLASS_WEAPON_EXOTIC = 11,
        ITEM_SUBCLASS_WEAPON_EXOTIC2 = 12,
        ITEM_SUBCLASS_WEAPON_FIST = 13,
        ITEM_SUBCLASS_WEAPON_MISC = 14,
        ITEM_SUBCLASS_WEAPON_DAGGER = 15,
        ITEM_SUBCLASS_WEAPON_THROWN = 16,
        ITEM_SUBCLASS_WEAPON_SPEAR = 17,
        ITEM_SUBCLASS_WEAPON_CROSSBOW = 18,
        ITEM_SUBCLASS_WEAPON_WAND = 19,
        ITEM_SUBCLASS_WEAPON_FISHING_POLE = 20
    };


    public enum ItemSubclassGem : int
    {
        ITEM_SUBCLASS_GEM_RED = 0,
        ITEM_SUBCLASS_GEM_BLUE = 1,
        ITEM_SUBCLASS_GEM_YELLOW = 2,
        ITEM_SUBCLASS_GEM_PURPLE = 3,
        ITEM_SUBCLASS_GEM_GREEN = 4,
        ITEM_SUBCLASS_GEM_ORANGE = 5,
        ITEM_SUBCLASS_GEM_META = 6,
        ITEM_SUBCLASS_GEM_SIMPLE = 7,
        ITEM_SUBCLASS_GEM_PRISMATIC = 8
    };


    public enum ItemSubclassArmor : int
    {
        ITEM_SUBCLASS_ARMOR_MISC = 0,
        ITEM_SUBCLASS_ARMOR_CLOTH = 1,
        ITEM_SUBCLASS_ARMOR_LEATHER = 2,
        ITEM_SUBCLASS_ARMOR_MAIL = 3,
        ITEM_SUBCLASS_ARMOR_PLATE = 4,
        ITEM_SUBCLASS_ARMOR_BUCKLER = 5,
        ITEM_SUBCLASS_ARMOR_SHIELD = 6,
        ITEM_SUBCLASS_ARMOR_LIBRAM = 7,
        ITEM_SUBCLASS_ARMOR_IDOL = 8,
        ITEM_SUBCLASS_ARMOR_TOTEM = 9
    };


    public enum ItemSubclassReagent : int
    {
        ITEM_SUBCLASS_REAGENT = 0
    };

    public enum ItemSubclassProjectile : int
    {
        ITEM_SUBCLASS_WAND = 0,        // ABS
        ITEM_SUBCLASS_BOLT = 1,        // ABS
        ITEM_SUBCLASS_ARROW = 2,
        ITEM_SUBCLASS_BULLET = 3,
        ITEM_SUBCLASS_THROWN = 4         // ABS
    };


    public enum ItemSubclassTradeGoods : int
    {
        ITEM_SUBCLASS_TRADE_GOODS = 0,
        ITEM_SUBCLASS_PARTS = 1,
        ITEM_SUBCLASS_EXPLOSIVES = 2,
        ITEM_SUBCLASS_DEVICES = 3,
        ITEM_SUBCLASS_JEWELCRAFTING = 4,
        ITEM_SUBCLASS_CLOTH = 5,
        ITEM_SUBCLASS_LEATHER = 6,
        ITEM_SUBCLASS_METAL_STONE = 7,
        ITEM_SUBCLASS_MEAT = 8,
        ITEM_SUBCLASS_HERB = 9,
        ITEM_SUBCLASS_ELEMENTAL = 10,
        ITEM_SUBCLASS_TRADE_GOODS_OTHER = 11,
        ITEM_SUBCLASS_ENCHANTING = 12,
        ITEM_SUBCLASS_MATERIAL = 13        // Added in 2.4.2
    };

    public enum ItemSubclassGeneric : int
    {
        ITEM_SUBCLASS_GENERIC = 0
    };


    public enum ItemSubclassRecipe : int
    {
        ITEM_SUBCLASS_BOOK = 0,
        ITEM_SUBCLASS_LEATHERWORKING_PATTERN = 1,
        ITEM_SUBCLASS_TAILORING_PATTERN = 2,
        ITEM_SUBCLASS_ENGINEERING_SCHEMATIC = 3,
        ITEM_SUBCLASS_BLACKSMITHING = 4,
        ITEM_SUBCLASS_COOKING_RECIPE = 5,
        ITEM_SUBCLASS_ALCHEMY_RECIPE = 6,
        ITEM_SUBCLASS_FIRST_AID_MANUAL = 7,
        ITEM_SUBCLASS_ENCHANTING_FORMULA = 8,
        ITEM_SUBCLASS_FISHING_MANUAL = 9,
        ITEM_SUBCLASS_JEWELCRAFTING_RECIPE = 10
    };


    public enum ItemSubclassMoney : int
    {
        ITEM_SUBCLASS_MONEY = 0
    };


    public enum ItemSubclassQuiver : int
    {
        ITEM_SUBCLASS_QUIVER0 = 0,        // ABS
        ITEM_SUBCLASS_QUIVER1 = 1,        // ABS
        ITEM_SUBCLASS_QUIVER = 2,
        ITEM_SUBCLASS_AMMO_POUCH = 3
    };


    public enum ItemSubclassQuest : int
    {
        ITEM_SUBCLASS_QUEST = 0
    };


    public enum ItemSubclassKey : int
    {
        ITEM_SUBCLASS_KEY = 0,
        ITEM_SUBCLASS_LOCKPICK = 1
    };


    public enum ItemSubclassPermanent : int
    {
        ITEM_SUBCLASS_PERMANENT = 0
    };


    public enum ItemSubclassJunk : int
    {
        ITEM_SUBCLASS_JUNK = 0,
        ITEM_SUBCLASS_JUNK_REAGENT = 1,
        ITEM_SUBCLASS_JUNK_PET = 2,
        ITEM_SUBCLASS_JUNK_HOLIDAY = 3,
        ITEM_SUBCLASS_JUNK_OTHER = 4,
        ITEM_SUBCLASS_JUNK_MOUNT = 5
    };

    public enum ItemSubclassGlyph : int
    {
        ITEM_SUBCLASS_GLYPH_WARRIOR = 1,
        ITEM_SUBCLASS_GLYPH_PALADIN = 2,
        ITEM_SUBCLASS_GLYPH_HUNTER = 3,
        ITEM_SUBCLASS_GLYPH_ROGUE = 4,
        ITEM_SUBCLASS_GLYPH_PRIEST = 5,
        ITEM_SUBCLASS_GLYPH_DEATH_KNIGHT = 6,
        ITEM_SUBCLASS_GLYPH_SHAMAN = 7,
        ITEM_SUBCLASS_GLYPH_MAGE = 8,
        ITEM_SUBCLASS_GLYPH_WARLOCK = 9,
        ITEM_SUBCLASS_GLYPH_DRUID = 11
    };



}
